// middleware/auth.js
const jwt = require('jsonwebtoken');

// 引入日志工具
const logger = require('../utils/logger');

module.exports = function(req, res, next) {
    // 1. 从请求头中获取token
    const token = req.header('x-auth-token');
    
    logger.middleware('AUTH', 'Auth middleware invoked');

    // 2. 检查token是否存在
    if (!token) {
        logger.warn('AUTH', 'No token provided, authorization denied');
        return res.status(401).json({ msg: 'No token, authorization denied' }); // 401: 未授权
    }

    // 3. 验证token
    try {
        logger.debug('AUTH', 'Verifying JWT token');
        const decoded = jwt.verify(token, process.env.JWT_SECRET);
        
        // 将解码后的用户信息（特别是user.id）附加到请求对象上
        req.user = decoded.user; 
        
        logger.auth('AUTH', 'Token verified successfully', { userId: req.user.id });
        
        // 调用next()，将控制权交给下一个中间件或路由处理器
        next();

    } catch (err) {
        logger.warn('AUTH', 'Invalid token', err);
        res.status(401).json({ msg: 'Token is not valid' });
    }
};